package com.gao.transportapi.service;

import com.gao.transportapi.common.convention.result.PageDTO;
import com.gao.transportapi.pojo.dto.AccountUpdateDTO;
import com.gao.transportapi.pojo.entity.Accounts;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gao.transportapi.pojo.query.AccountQuery;
import com.gao.transportapi.pojo.vo.AccountBalanceVO;
import com.gao.transportapi.pojo.vo.AccountVO;

import java.util.List;

/**
 * <p>
 * SILICONFLOW平台账户及API密钥管理表 服务类
 * </p>
 *
 * @author GWX.cz
 * @since 2025-06-20
 */
public interface IAccountsService extends IService<Accounts> {


    /**
     * 批量创建账户
     *
     * @param accountAddList 账户创建信息列表
     */
    void batchCreateAccounts(List<String> accountAddList);

    /**
     * 根据key逻辑删除账户
     *
     * @param key 密钥
     */
    void deleteAccountByKey(String key);

    /**
     * 根据id逻辑删除账户
     *
     * @param id 账户ID
     */
    void deleteAccountById(Integer id);

    /**
     * 根据id更新账户信息
     *
     * @param accountUpdateDTO 账户更新信息
     * @return 更新后的账户信息
     */
    AccountVO updateAccountById(AccountUpdateDTO accountUpdateDTO);

    /**
     * 根据key更新账户信息
     *
     * @param accountUpdateDTO 账户更新信息
     * @return 更新后的账户信息
     */
    AccountVO updateAccountByKey(AccountUpdateDTO accountUpdateDTO);

    /**
     * 分页条件获取账户列表
     *
     * @param query 查询条件
     * @return 分页账户列表
     */
    PageDTO<AccountVO> listAccounts(AccountQuery query);

    /**
     * 根据id获取账户信息
     *
     * @param id 账户ID
     * @return 账户信息
     */
    AccountVO getAccountById(Integer id);

    /**
     * 根据key获取账户信息
     *
     * @param key 密钥
     * @return 账户信息
     */
    AccountVO getAccountByKey(String key);

    /**
     * 随机获取一个活跃的平台密钥
     *
     * @param platformType 平台类型
     * @return 账户密钥
     */
    String getRandomActiveAccount(String platformType);

    /**
     * 批量更新账户余额
     * 通过发送请求获取最新余额并更新
     *
     * @return 更新后的账户余额信息列表
     */
    List<AccountBalanceVO> batchUpdateAccountsBalance(List<Integer> accountIds);
}
